#include<bits/stdc++.h>
using namespace std;
const int N=2005;

int T,n,m;
vector<int> edges[N];
bool visit[N],tag;

void dfs(int s,int cur){
	if(tag) return;
	int size=edges[s].size();
	for(int i=0;i<size;i+=2){
		int t=edges[s][i],w=edges[s][i+1];
		if(tag) return;
		if(visit[t]){
			if(cur+w<0){
				tag=true;
				return;
			}
		}
		else{
			visit[t]=true;
			dfs(t,cur+w);
			visit[t]=false;
		}
	}
}
int main(){
	scanf("%d",&T);
	int s,t,w;
	for(int k=0;k<T;k++){
		scanf("%d%d",&n,&m);
		for(int j=1;j<=n;j++) edges[j].clear();
		for(int i=0;i<m;i++){
			scanf("%d%d%d",&s,&t,&w);
			if(w>=0){
				edges[s].emplace_back(t);
				edges[s].emplace_back(w);
				edges[t].emplace_back(s);
				edges[t].emplace_back(w);
			}
			else{
				edges[s].emplace_back(t);
				edges[s].emplace_back(w);				
			}
		}
		memset(visit,false,sizeof(visit));
		tag=false;
		visit[1]=true;
		dfs(1,0);
		if(tag) printf("YES");
		else printf("NO");
		printf("\n");
	}
	return 0;
}
